package com.vip8.recorder.service.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

/**
 * Json转换工具类
 */
@Slf4j
public class JsonUtil {

    /**
     * 将json字符串转换成目标对象
     *
     * @param json
     * @param target
     * @param <T>
     * @return
     */
    public static <T> T parseObject(String json, Class<T> target) {
        if (StringUtil.isEmpty(json) || target == null) {
            return null;
        }
        try {
            return JSON.parseObject(json, target);
        } catch (Exception e) {
            log.info("parseObjectError: " + e.toString());
        }

        return null;
    }

    /**
     * 复杂类型转换
     *
     * @param json
     * @param type
     * @param <T>
     * @return
     */
    public static <T> T parseObject(String json, TypeReference<T> type) {
        if (StringUtil.isEmpty(json) || type == null) {
            return null;
        }
        try {
            return JSON.parseObject(json, type);
        } catch (Exception e) {
            log.info("parseObjectError: " + e);
        }

        return null;
    }

    /**
     * 将json字符串转换为目标对象列表
     *
     * @param json
     * @param target
     * @param <T>
     * @return
     */
    public static <T> List<T> parseList(String json, Class<T> target) {
        if (StringUtil.isEmpty(json) || target == null) {
            return null;
        }
        try {
            return JSON.parseArray(json, target);
        } catch (Exception e) {
            log.info("parseListError: " + e.toString());
        }
        return null;
    }

    /**
     * 将对象转换成json字符串
     *
     * @param object
     * @return
     */
    public static String toJsonString(Object object) {
        if (object == null) {
            return null;
        }
        try {
            return JSON.toJSONString(object);
        } catch (Exception e) {
            log.info("toJsonStringError: " + e.toString());
        }
        return null;

    }


}
